package com.pxst.resp;
/** 
 * 统一对外放回
* @author yangxy
* @version 创建时间：2023年7月25日 下午4:18:27 
*/

import com.github.pagehelper.Page;
import com.pxst.constants.ResCodeContants;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

@Data
@NoArgsConstructor
public class ApiResp<T> {
	@ApiModelProperty(value = "响应编码")
	private String resCode;
	
	@ApiModelProperty(value = "描述信息")
	private String resDesc;
	
	@ApiModelProperty(value = "结果集")
	private T data;

	private ApiResp(String resCode, String resDesc, T data) {
		super();
		this.resCode = resCode;
		this.resDesc = resDesc;
		this.data = data;
	}
	/**
	 * 无数据操作成功
	* @author yangxy
	* @version 创建时间：2023年7月25日 下午4:40:22 
	* @return
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static ApiResp sucess() {
		return new ApiResp(ResCodeContants.SUCESS,"操作成功",null);
	}
	
	/**
	 * 有数据操作成功
	* @author yangxy
	* @version 创建时间：2023年7月25日 下午4:40:32 
	* @param data
	* @return
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static ApiResp sucess(Object data) {
		return new ApiResp(ResCodeContants.SUCESS,"操作成功", data);
	}
	
	/**
	 * 参数错误
	* @author yangxy
	* @version 创建时间：2023年7月25日 下午4:41:42 
	* @param desc 错误描述
	* @return
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static ApiResp paramError(String desc) {
		return new ApiResp(ResCodeContants.PARAM_ERROR,desc,null);
	}
	
	/**
	 * 业务错误
	* @author yangxy
	* @version 创建时间：2023年7月25日 下午4:41:42 
	* @param desc 错误描述
	* @return
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static ApiResp bussError(String desc) {
		return new ApiResp(ResCodeContants.PARAM_ERROR,desc,null);
	}
	
	/**
	 * 权限错误
	* @author yangxy
	* @version 创建时间：2023年7月25日 下午4:42:56 
	* @param desc 错误描述
	* @return
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static ApiResp authError(String desc) {
		return new ApiResp(ResCodeContants.AUTH_ERROR,desc,null);
	}
	
	/**
	 * 系统错误
	* @author yangxy
	* @version 创建时间：2023年7月25日 下午5:28:11 
	* @return
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static ApiResp sysError() {
		return new ApiResp(ResCodeContants.SYS_ERROR,"系统错误",null);
	}
	
	/**
	 * token无效
	* @author yangxy
	* @version 创建时间：2023年7月26日 上午10:48:07 
	* @return
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static ApiResp jwtError(String desc) {
		return new ApiResp(ResCodeContants.JWT_ERROR,desc,null);
	}
	
	/**
	 * 验证码错误
	* @author yangxy
	* @version 创建时间：2023年7月26日 下午5:27:27 
	* @param desc 错误描述
	* @return
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static ApiResp codeError(String desc) {
		return new ApiResp(ResCodeContants.CODE_ERROR,desc,null);
	}
	
	/**
	 * 返回分页数据
	* @author yangxy
	* @version 创建时间：2023年8月14日 下午12:55:45 
	* @param page
	* @return
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static ApiResp page(Page page){
		PageResp pageVo = new PageResp();
		pageVo.setPage(page.getPageNum());
		pageVo.setRp(page.getPageSize());
		pageVo.setResult(page.getResult());
		pageVo.setTotal((int) page.getTotal());
		return sucess(pageVo);
	}

	public static ApiResp page(Page page,Map<String,BigDecimal> subTotals,Map<String,BigDecimal> totals){
		PageResp pageVo = new PageResp();
		pageVo.setPage(page.getPageNum());
		pageVo.setRp(page.getPageSize());
		pageVo.setResult(page.getResult());
		pageVo.setSubTotals(subTotals);
		pageVo.setTotals(totals);

		return sucess(pageVo);
	}

	/**
	 * 封装分页返回对象
	 * @param page 当前页
	 * @param pageSize 每页显示条数
	 * @param total 总条数
	 * @param result 查询数据
	 * @param <T> 返回对象
	 * @return
	 */
	public static <T> ApiResp page(int page, int pageSize, int total, List<T> result){
		PageResp pageVo = new PageResp();
		pageVo.setPage(page);
		pageVo.setRp(pageSize);
		pageVo.setResult(result);
		pageVo.setTotal(total);
		return sucess(pageVo);
	}

	/**
	 * 分页中添加总计和小计
	 * @param page 当前页
	 * @param pageSize 每页显示条数
	 * @param total 总条数
	 * @param result 查询数据
	 * @param subTotals 小计
	 * @param totals 总计
	 * @param <T> 返回对象
	 * @return
	 */
	public static <T> ApiResp page(int page, int pageSize, int total, List<T> result, Map<String, BigDecimal> subTotals, Map<String, BigDecimal> totals){
		PageResp pageVo = new PageResp();
		pageVo.setPage(page);
		pageVo.setRp(pageSize);
		pageVo.setResult(result);
		pageVo.setTotal(total);
		pageVo.setSubTotals(subTotals);
		pageVo.setTotals(totals);
		return sucess(pageVo);
	}




	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static ApiResp error(String code,String msg){
		return new ApiResp(code,msg, null);
	}


}
